package com.hp.annocatation;

import com.hp.enums.RedisLockType;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * @author hp
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface RedisLock {

    /**
     * redis锁key，支持SpEL
     * key若为常量，则key为常量值
     * key若为参数，则key为参数中相应的值
     */
    String key() default "small-tools:redis_locks";

    /**
     * 锁类型
     */
    RedisLockType lockType() default RedisLockType.REENTRANT_LOCK;

    /**
     * 获取锁等待时间，默认3秒
     */
    long waitTime() default 3000L;

    /**
     * 锁自动释放时间，默认30秒
     */
    long leaseTime() default 30000L;

    /**
     * 时间单位，默认毫秒（获取锁等待时间和持锁时间都用此单位）
     */
    TimeUnit unit() default TimeUnit.MILLISECONDS;

}
